<?php
/*
 * 工厂模式相关的调用
 */
namespace app\common\lib;
class classArr{
    /*
     * 配置
     */
    public static function smsClassStat(){
        return [
            "ali"=>"app\common\lib\sms\AliSms",
            "baidu"=>"app\common\lib\sms\BaiduSms",
            "jd"=>"app\common\lib\sms\JdSms"
        ];
    }

    public static function uploadClassStat(){
        return [
            "text"=>"xxx",
            'image'=>"xxx"
        ];
    }

    /*
     *
     * @param $type     数组下标 ali
     * @param $classs   数组
     * @param array $params  参数
     * @param bool $needInstance  是否转对象
     * @return bool|mixed|object
     * @throws \ReflectionException
     */
     public static  function initClass($type,$classs,$params=[],$needInstance=false){
         //1 如果工厂模式调用的方法是静态方法，这个地方返回的是类库 AliSms
         //2 如果工厂模式调用的不是静态方法，我们返回的是对象
         if(!array_key_exists($type,$classs)){
             return false;
         }
         $className = $classs[$type];
         //new \ReflectionClass(A)  建立A反射类
         //newInstanceArgs($args)   相当于实例化A对象
         return $needInstance == true ? (new  \ReflectionClass($className))->newInstanceArgs($params) : $className;
     }
}
